//
//  MPCButton.h
//  Pods
//
//  Created by 蔡勋 on 2017/7/15.
//
//
//


#import <UIKit/UIKit.h>
#import "MPCWebImageHeader.h"

NS_ASSUME_NONNULL_BEGIN


@interface MPCButton : UIButton

// 扩展属性，携带字典参数
@property (nonatomic, strong) NSMutableDictionary *mdicParam;

// 是否加载到背景图片上(默认为NO，此属性要在调用下载图片方法前设置) NO 设置成普通图片 YES 设置成背景图片
@property (nonatomic, assign, readonly) BOOL isSetBgImg;

/// 下载后是否显示消失动画效果，YES表示显示动画，暂不对外开放
@property (nonatomic, assign, readonly) BOOL isShowDismissAnimated;
/// 动画展示时间
@property (nonatomic, assign, readonly) CGFloat fltAnimDuration;
/// 默认图片
@property (nonatomic, strong, readonly) UIImage *imgPlaceholder;
/// 下载错误时显示的图片
@property (nonatomic, strong, readonly) UIImage *imgError;
/// 是否显示占位图片
@property (nonatomic, assign, readonly) BOOL isShowPlaceholderImg;

/**
 是否加载到背景图片上(默认为NO，此属性要在调用下载图片方法前设置) NO 设置成普通图片 YES 设置成背景图片
 */
- (MPCButton * _Nullable (^_Nullable)(BOOL))setBgImg;

/**
 显示图片时是否显示动画
 */
- (MPCButton * _Nullable (^_Nullable)(BOOL))showDismissAnimated;

/**
 显示图片动画的显示时间
 */
- (MPCButton * _Nullable (^_Nullable)(CGFloat))animDuration;

/**
 占位图片
 */
- (MPCButton * _Nullable (^_Nullable)(UIImage *_Nullable))imagePlaceholder;

/**
 加载图片错误图片
 */
- (MPCButton * _Nullable (^_Nullable)(UIImage *_Nullable))imageError;

/**
 是否显示占位图
 */
- (MPCButton * _Nullable (^_Nullable)(BOOL))showPlaceholderImg;


#pragma mark - ********************************** 初始化方法 工厂方法 *********************************

/*!
 *  @author caixun
 *  @brief  初始化基本设置
 *  @param frame btn的frame
 *  @return 返回btn实例
 */
+ (instancetype)getWithFrame:(CGRect)frame;
+ (instancetype)getWithFrame:(CGRect)frame target:(id)target action:(SEL)action;


#pragma mark - ********************************** 初始化方法 实例方法 *********************************

/*!
 *  @author caixun
 *  @brief  初始化基本设置
 *  @param frame  btn的frame
 *  @param target btn响应事件的对象
 *  @param action 响应事件
 *  @return 返回btn对象
 */
- (instancetype)initWithFrame:(CGRect)frame target:(id)target action:(SEL)action;


#pragma mark - *********************************** 设置属性 实例方法 **********************************

/*!
 *  @author caixun
 *  @brief  设置target和action
 *  @param target   按钮的响应事件的对象
 *  @param action   按钮响应事件的响应函数
 */
- (void)setTarget:(id)target action:(SEL)action;

/*!
 *  @author caixun
 *  @brief  设置Image
 *  @param imgNor   默认状态时按钮的图片  该图片会被添加到button的image上
 */
- (void)setNorImg:(UIImage *)imgNor;

/*!
 *  @author caixun
 *  @brief  设置BgImage
 *  @param imgBgNor 默认状态时按钮的图片  该图片会被添加到button的bgimage上
 */
- (void)setNorBgImg:(UIImage *)imgBgNor;

/*!
 *  @author caixun
 *  @brief  同时设置BgImage和Title
 *  @param imgBgNor      默认状态下btn的图片
 *  @param strNorTitle   默认状态下btn的文字
 *  @param colorNorTitle 默认状态下btn的颜色
 *  @param fontTitle     默认状态下btn的字体
 */
- (void)setNorBgImg:(UIImage *)imgBgNor
           norTitle:(NSString *)strNorTitle
      norTitleColor:(UIColor *)colorNorTitle
          titleFont:(UIFont *)fontTitle;

/*!
 *  @author caixun
 *  @brief  设置圆角，边框
 *  @param fltCornerRadius 设置btn的圆角
 *  @param fltBorderWidth  设置btn的边框的宽度
 *  @param colorBorder     设置btn边框的颜色
 */
- (void)setCornerRadius:(CGFloat)fltCornerRadius
            borderWidth:(CGFloat)fltBorderWidth
            borderColor:(UIColor *)colorBorder;

/*!
 *  @author caixun
 *  @brief  设置圆角 4个角全部进行圆角操作
 *  @param cornerRadius 圆角半径
 */
- (void)setCornerRadiusForAll:(float)cornerRadius;

/*!
 *  @author caixun
 *  @brief  设置圆角 指定某个角进行圆角操作
 *  @param corners     要做圆角操作的角
 *  @param cornerRadii 圆角半径
 */
- (void)setCornerRadiusForPart:(UIRectCorner)corners cornerRadii:(CGSize)cornerRadii;


#pragma mark - ************************************ 动态加载图片URL **********************************

/**
 网络图片加载的方法
 
 */
- (void)mp_setImageWithURL:(nullable NSString *)imageStrURL;

- (void)mp_setImageWithURL:(nullable NSString *)imageStrURL
                   options:(MPWebImageOptions)options
                   success:(nullable MPWebImageSuccessBlock)success
                      fail:(nullable MPWebImageFailBlock)fail;

- (void)mp_setImageWithURL:(nullable NSString *)imageStrURL
                   options:(MPWebImageOptions)options
                  progress:(nullable MPWebImageDownloaderProgressBlock)progressBlock
                   success:(nullable MPWebImageSuccessBlock)success
                      fail:(nullable MPWebImageFailBlock)fail;

/**
 获取异步线性队列，用于读取硬盘图片
 
 @return 异步线性队列
 */
+ (dispatch_queue_t)mp_setterQueue;


@end


NS_ASSUME_NONNULL_END


